package zxj.spay.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * 日期的工具类
 * @author 朱小杰
 * 日期2016-03-06
 */
public class DateUtil {
	
	/**
	 * 获取今年第一天的日期对象
	 * @return
	 */
	public static Date getThisYearFirstDay(){
		Calendar calendar = Calendar.getInstance(new Locale("zh", "CN"));
		int j = calendar.get(Calendar.YEAR);
		calendar.clear();
		
		calendar.set(Calendar.YEAR,j);
		
		Date time = calendar.getTime();
		return time;
	}
	
	/**
	 * 获取本月第一天的日期对象
	 * @return
	 */
	public static Date getThisMonthFirstDay(){
		Calendar calendar = Calendar.getInstance(new Locale("zh", "CN"));
		int i = calendar.get(Calendar.DAY_OF_MONTH);
		calendar.add(Calendar.DATE, -i+1);
		
		Date time = calendar.getTime();
		time = getTheDayFirstTimeToDate(time);
		return time;
	}
	
	/**
	 * 获取这个礼拜一的日期对象
	 * @return
	 */
	public static Date getThisWeekMonday(){
		Date date = new Date();
		Calendar calendar = Calendar.getInstance(new Locale("zh", "CN"));
		calendar.setTime(date);

		//这里的i就是一周天数，在西方国家，周日是一周的第一天，那么周日就是1，周一就是2
		//这里之所以要减1，是因为中国是周一第1天
		int day_of_week = calendar.get(Calendar.DAY_OF_WEEK)-1;
		if(day_of_week == 0){
			//发现是周日
			day_of_week = 7;
		}
		calendar.add(Calendar.DATE, -day_of_week+1);
		
		Date time = calendar.getTime();
		time = DateUtil.getTheDayFirstTimeToDate(time);
		return time;
	}
	/**
	 * 获取本周周日的日期对象
	 * @return
	 */
	public static Date getThisWeekSunday(){
		Calendar calendar = Calendar.getInstance(new Locale("zh", "CN"));
		int day_of_week = calendar.get(Calendar.DAY_OF_WEEK)-1;
		if(day_of_week == 0){
			day_of_week = 7;
		}
		calendar.add(Calendar.DATE, -day_of_week+7);
		Date time = calendar.getTime();
		time = getTheDayFirstTimeToDate(time);
		
		return time;
	}
	
	/**
	 * 获取该天的第一秒
	 * @param date 日期对象
	 * @return
	 */
	public static Date getTheDayFirstTimeToDate(Date date){
		Calendar calendar = Calendar.getInstance(new Locale("zh", "CN"));
		calendar.setTime(date);
		
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		
		return calendar.getTime();
	}
	
	/**
	 * 获取该天最后一秒
	 * @param date 日期对象
	 * @return
	 */
	public static Date getTheDayLastTimeToDate(Date date){
		Calendar calendar = Calendar.getInstance(new Locale("zh", "CN"));
		calendar.setTime(date);
		
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		calendar.set(Calendar.MILLISECOND, 999);
		
		return calendar.getTime();
	}

	
	/**
	 * 把字符串转化为日期
	 * @param dateStr 日期字符串
	 * @param format  日期格式
	 * @return
	 */
	public static Date parseDate(String dateStr,String format){
		try {
			DateFormat mat = new SimpleDateFormat(format);
			return mat.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
    /**
     * 得到该日期最后的一秒
     * @param date
     * @return
     * @throws ParseException 
     */
    public static String getTheDayLastTimeToString(Date date){
    	try {
			DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
			String str=format.format(date);
			Date d2=format.parse(str);
			/////////////////得到想要测试的时间整天 
			
			
			int dayMis=1000*60*60*24;//一天的毫秒-1
			
			//返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
			long curMillisecond=d2.getTime();//当天的毫秒
			
			long resultMis=curMillisecond+(dayMis-1); //当天最后一秒
			
			DateFormat format2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
			//得到我需要的时间    当天最后一秒
			Date resultDate=new Date(resultMis);
			return format2.format(resultDate);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
    }
    
    /**
     * 获取该天的第一秒
     * @param date
     * @return
     * @throws ParseException 
     */
    public static String getTheDayFirstTimeToString(Date date){
    	DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    	String sd1 = df.format(date);
    	String fix = " 00:00:00";
    	return sd1+fix;
    }
    
    /**
     * 得到该日期最后的一秒
     * @param date
     * @return
     * @throws ParseException 
     */
    public static String getTheDayLastTimeToString(String date){
    	try {
			DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
			String str= date;
			Date d2=format.parse(str);
			/////////////////得到想要测试的时间整天 
			
			
			int dayMis=1000*60*60*24;//一天的毫秒-1
			
			//返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
			long curMillisecond=d2.getTime();//当天的毫秒
			
			long resultMis=curMillisecond+(dayMis-1); //当天最后一秒
			
			DateFormat format2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
			//得到我需要的时间    当天最后一秒
			Date resultDate=new Date(resultMis);
			return format2.format(resultDate);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
    }
    
    /**
     * 获取该天的第一秒
     * @param date
     * @return
     * @throws ParseException 
     */
    public static String getTheDayFirstTimeToString(String date){
    	String sd1 = date;
    	String fix = " 00:00:00";
    	return sd1+fix;
    }
    
    /**
     * 把一个日期对象，转成字符串
     * @param date 日期
     * @param format 日期格式
     * @return
     */
    public static String formatDate(Date date,String format){
    	DateFormat df = new SimpleDateFormat(format);
    	String sdate = df.format(date);
    	return sdate;
    }
    /**
     * 把一个日期对象转换成字符串<br>
     * 格式: yyyy-MM-dd
     * @param date 日期对象
     * @return
     */
    public static String formatDate(Date date){
    	DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    	String format = df.format(df);
    	return format;
    }
}
